//================v3要点总结===============
/**
 * 1. 用深度优先遍历,在v2的基础上再次优化
 */

/**
 * Definition for a binary tree node.
 */
// function TreeNode(val, left, right) {
//     this.val = (val === undefined ? 0 : val)
//     this.left = (left === undefined ? null : left)
//     this.right = (right === undefined ? null : right)
// }
/**
 * @param {TreeNode} root1
 * @param {TreeNode} root2
 * @return {TreeNode}
 */
var mergeTrees = function (root1, root2) {

    //如果其中一个为空，则返回另一个，不管另一个为不为空
    if (!root1) {
        return root2
    }
    if (!root2) {
        return root1
    }
    // 得到合并的节点
    let merged = { val: root1.val + root2.val, left: null, right: null }

    // 上述代码都在执行合并操作，下述代码则准备进行下一次的合并
    // 然后分别从左、从右进行深度遍历，对左和右进行合并
    merged.left = mergeTrees(root1.left, root2.left)
    merged.right = mergeTrees(root1.right, root2.right)
    return merged
}

console.log(3, mergeTrees())